pub trait CargoError: Error + Send + 'static {
fn is_human(&self) -> bool { false }
fn cargo_cause(&self) -> Option<&CargoError>{ None }
+ fn as_error(&self) -> &Error where Self: Sized { self as &Error }
}
impl Error for Box<CargoError> {
pub desc: String,
pub exit: Option<ExitStatus>,
pub output: Option<Output>,
- cause: Option<Box<Error + Send>>,
+ cause: Option<Box<CargoError>>,
}
impl Error for ProcessError {
fn description(&self) -> &str { &self.desc }
fn cause(&self) -> Option<&Error> {
- self.cause.as_ref().map(|e| &**e as &Error)
+ self.cause.as_ref().map(|e| e.as_error())
}
}
// Construction helpers
pub fn process_error(msg: &str,
- cause: Option<Box<Error + Send>>,
+ cause: Option<Box<CargoError>>,
status: Option<&ExitStatus>,
output: Option<&Output>) -> ProcessError
{